package com.wisecoach.gatewayplus.event;

import io.grpc.CallOptions;

import java.util.function.UnaryOperator;

/**
 * 区块事件源，用于向peer节点拉取区块
 * {@code @author:} wisecoach
 * {@code @date:} 2023/6/14 下午10:14
 * {@code @version:} 1.0.0
 */

public interface FilteredBlockSource {
    /**
     * 取得当前区块源的channel名
     * @return channel名
     */
    String getChannel();

    /**
     * 设置 区块事件 发布者
     */
    void setFilteredBlockEventPublisher(FilteredBlockEventPublisher publisher);

    /**
     * 取得该区块源的最新高度
     * Note：仅用于注册监听器时使用，为了效率，不保证线程安全
     */
    long getLatest();

    /**
     * 开始监听区块，从创世区块开始
     * @param options grpc连接选项
     */
    void start(UnaryOperator<CallOptions> options);

    /**
     * 开始监听区块
     * @param startNumber 开始监听的区块高度
     * @param options grpc连接选项
     */
    void start(long startNumber, UnaryOperator<CallOptions> options);

}
